﻿using System.Collections.Generic;
using System.Runtime.Serialization;
using BlobNet.Base.Interfaces;

namespace BlobNet.Base.Storage
{
    public interface IStorageManager : IDeserializationCallback
    {
        void FillFrom(IStorageManager currentStorage);

        bool HasStatusValue(string propertyName);
        object SetStatusValue<TPropertyType>(string propertyName, TPropertyType value);
        TPropertyType GetStatusValue<TPropertyType>(string propertyName);

        void ClearData();
        bool CanDettach();

        IList<IPersisteable> GetVariantSourcesItems();
        IList<string> GetRegisteredProperties();
        List<TItemType> GetItems<TItemType>() where TItemType : BlobPart;
    }
}